//
//  UIImage+DDUiimageCategory.m
//  DDMusic
//
//  Created by rimi on 16/11/8.
//  Copyright © 2016年 FengBaoFamily. All rights reserved.
//

#import "UIImage+DDUiimageCategory.h"

@implementation UIImage (DDUiimageCategory)
#pragma mark 通过验收返回一张颜色的图片
+ (UIImage*)dd_imageWithColor:(UIColor*)color size:(CGSize)size{
    ///创建绘图上下文(在draw方法中不用，因为自动有一个，其它都要)
    //1,先获得要绘制的范围
    CGRect rect = CGRectMake(0, 0, size.width, size.height);
    //2,创建绘图上下文
    UIGraphicsBeginImageContext(size);//创建上下文
    CGContextRef context = UIGraphicsGetCurrentContext();//获得上面创建的上下文
    ///绘制
    //1,准备填充色
    CGContextSetFillColorWithColor(context, color.CGColor);
    CGContextFillRect(context, rect);
    ///将绘制好后的上下文转换为图片
    UIImage* newImage = UIGraphicsGetImageFromCurrentImageContext();
    /// 关闭上下文(因为是C语言,不支持arc)
    UIGraphicsEndImageContext();
    ///返回图片
    return newImage;
    
    
    
    
}
#pragma mark 给image设置圆角
-(UIImage*)dd_imageWithCornerRadius:(CGFloat)radius{
    
    CGRect rect = (CGRect){0.f,0.f,self.size};
    
    // void UIGraphicsBeginImageContextWithOptions(CGSize size, BOOL opaque, CGFloat scale);
    //size——同UIGraphicsBeginImageContext,参数size为新创建的位图上下文的大小
    //    opaque—透明开关，如果图形完全不用透明，设置为YES以优化位图的存储。
    //    scale—–缩放因子
    UIGraphicsBeginImageContextWithOptions(self.size, NO, [UIScreen mainScreen].scale);
    
    //根据矩形画带圆角的曲线
    CGContextAddPath(UIGraphicsGetCurrentContext(), [UIBezierPath bezierPathWithRoundedRect:rect cornerRadius:radius].CGPath);
    
    [self drawInRect:rect];
    
    //图片缩放，是非线程安全的
    UIImage * image = UIGraphicsGetImageFromCurrentImageContext();
    
    //关闭上下文
    UIGraphicsEndImageContext();
    
    return image;
}
#pragma mark 等比例压缩图片
- (UIImage *)dd_resizedImagetoWidth:(CGFloat)width {
    // 第一步 先获得图片尺寸
    CGFloat imageW = self.size.width;
    CGFloat imageH = self.size.height;
    if (imageW > width) {
        imageW = width;
        imageH = width / self.size.width * imageH;
    }
    // 获得调整后图片尺寸
    CGSize imageSize = CGSizeMake(imageW, imageH);
    // 创建图形上下文
    UIGraphicsBeginImageContext(imageSize);
    // 画图
    [self drawInRect:CGRectMake(0, 0, imageW, imageH)];
    // 获得绘制后的图片
    UIImage *resizeImage = UIGraphicsGetImageFromCurrentImageContext();
    // 关闭上下文
    UIGraphicsEndImageContext();
    
    return resizeImage;
}

- (UIImage *)dd_resizedImageToSize:(CGSize)size {
    // 获得图片等尺寸
    CGFloat imageW = self.size.width;
    CGFloat imageH = self.size.height;
    
    // 判断
    if (imageW > size.width) {
        // 调整图片缩放比例
        imageW = size.width;
        imageH = size.width / self.size.width * imageH;
    }
    // 获得开启图形上下文的尺寸
    CGSize refSize = CGSizeMake(imageW, imageH);
    /**
     *  开启图片图形上下
     *
     *  @param refSize  上下文尺寸
     *  @param opaque 透明度 YES 不透明  NO 透明
     *  @param scale 缩放比例 一般设为0.0
     */
    UIGraphicsBeginImageContextWithOptions(refSize, YES, 0.0);
    // 绘制图形
    [self drawInRect:CGRectMake(0, 0, imageW, imageH)];
    // 将绘制的图形上下转换为图片
    UIImage *resizedImage = UIGraphicsGetImageFromCurrentImageContext();
    // 关闭上下文
    UIGraphicsEndImageContext();
    
    // 返回
    return resizedImage;
}
#pragma mark 等比例放大图片
- (UIImage *)dd_zoomImageToSize:(CGSize)size {
    // 获得图片等尺寸
    CGFloat imageW = self.size.width;
    CGFloat imageH = self.size.height;
    
    // 判断
    if (imageW < size.width) {
        // 调整图片缩放比例
        imageW = size.width;
        imageH = size.width / self.size.width * imageH;
    }
    // 获得开启图形上下文的尺寸
    CGSize refSize = CGSizeMake(imageW, imageH);
    /**
     *  开启图片图形上下
     *
     *  @param refSize  上下文尺寸
     *  @param opaque 透明度 YES 不透明  NO 透明
     *  @param scale 缩放比例 一般设为0.0
     */
    UIGraphicsBeginImageContextWithOptions(refSize, NO, 0.0);
    // 绘制图形
    [self drawInRect:CGRectMake(0, 0, imageW, imageH)];
    // 将绘制的图形上下转换为图片
    UIImage *resizedImage = UIGraphicsGetImageFromCurrentImageContext();
    // 关闭上下文
    UIGraphicsEndImageContext();
    
    // 返回
    return resizedImage;
}
@end
